package edu.gduf.service;

import edu.gduf.domain.Activity;
import edu.gduf.domain.ResultInfo;

import javax.servlet.http.HttpSession;

/**
 * @author 谢佳豪
 * @data 2020/10/9 - 17:31
 * @target 活动模块业务层接口
 */
public interface ActivityService {

    /**
     * 活动发布（添加活动信息）
     * @param activity 前端表单提交activity数据
     * @param httpSession httpSession域
     * @return json数据
     */
    ResultInfo addActivity(Activity activity, HttpSession httpSession);

    /**
     * 查询活动目录
     * @return
     */
    ResultInfo catalogList();

    /**
     * 活动查询（全部-分页）
     * @param currentPageIndex 当前页面下标值
     * @return json数据
     */
    ResultInfo selectActivityList(Integer currentPageIndex);

    /**
     * 活动查询（条件）
     * @param cid 分类目录的id
     * @param currentPageIndex 当前页面下标值
     * @return json
     */
    ResultInfo selectActivitiesByCid(Integer cid, Integer currentPageIndex);

    /**
     * 根据组织id查询其所拥有的活动信息
     * @param aid association表id主键
     * @param currentPageIndex 当前页面下标
     * @return json
     */
    ResultInfo selectActivitiesByAid(Integer aid, Integer currentPageIndex);

    /**
     * 根据activity_id查询单条活动详细信息--同时更新view浏览量
     * @param id activity表主键id
     * @return json
     */
    ResultInfo selectActivityById(Integer id);

    /**
     * 根据title模糊查询活动信息数据
     * @param title 标题信息
     * @param currentPageIndex 当前页面下标值
     * @return json
     */
    ResultInfo selectActivitiesByTitle(String title, Integer currentPageIndex);

    /**
     * 活动更新
     * @param activity 活动对象信息
     * @return json
     */
    ResultInfo updateActivity(Activity activity);

    /**
     * 根据activity_id 删除活动信息
     * @param id activity_id
     * @return json
     */
    ResultInfo delete(Integer id);

    /**
     * 选择合适的用户，减少招募人数需求
     * @param id activity_id
     * @param username
     * @return json
     */
    ResultInfo reducePopulation(Integer id, String username);

    /**
     * 根据发布时间和结束时间的时间段，判断是否时间到了，进行修改活动状态
     * @param timeout 时间标识符
     * @param id activity_id
     * @return json
     */
    ResultInfo updateStatus(Boolean timeout, Integer id);

    /**
     * 根据uid查询主题数
     * @param uid
     * @return
     */
    ResultInfo searchNum(Integer uid);
}
